<?php

/**
 * Подтверждение действия.
 *
 */
class Confirm_Action_Default extends Kernel_Controller_Abstract {

    /**
     * Хэш подтверждения, которое нужно обработать.
     *
     * @var string
     */
    private $_hash;

    /**
     * Метод обработки пользовательского запроса.
     *
     */
    public function process() {
        $this->_hash = Application::getRequest()->query();
        parent::process();
        $this->_cleanup();
    }

    /**
     * Возвращает компонент-обработчик действия.
     *
     * @return  Kernel_Filter
     */
    protected function _getFilter() {
        if (!count($_action = $this->_getAction())) {
            $this->_abort('Confirmation not found');
        }
        list($module, $action, $id) = array_values($_action);
        // руками загружаем языковые константы модуля
        Kernel_i18n::import(ucfirst($module));
        return Kernel::factory(ucfirst($module) . '_Confirm', $action, array('id' => $id));
    }

    /**
     * Возвращает параметры действия, соответствующего текущему хешу.
     *
     * @return  array
     */
    private function _getAction() {
        $query = 'SELECT
                         `module`, `action`, `record_id`
                    FROM
                         `system_confirm`
                   WHERE
                         ' . database::condition(array('hash' => $this->_hash));
        return database::fetchRow($query);
    }

    /**
     * Очищает подтверждение с текущим хешем.
     *
     */
    private function _cleanup() {
        database::delete('system_confirm', array('hash' => $this->_hash));
    }
}
